<html>
<body>
<h1>Overview</h1>
Sisu is a modular <a href="https://javax-inject.github.io/javax-inject">JSR330</a>-based container that supports classpath scanning, auto-binding, and dynamic auto-wiring.
<p>
Sisu uses <a href="https://github.com/google/guice">Google-Guice</a> to perform dependency injection and provide the core JSR330 support, but removes the need to write explicit bindings in Guice modules:
<pre>
Guice.createInjector(
  new {@link org.eclipse.sisu.wire WireModule}(                       // auto-wires unresolved dependencies
    new {@link org.eclipse.sisu.space SpaceModule}(                     // scans and binds @Named components
      new {@link org.eclipse.sisu.space URLClassSpace}( classloader )    // abstracts class/resource finding
) ) );
</pre>
In the example above the {@code SpaceModule} scans the classpath using the {@code ClassSpace} abstraction. Any classes annotated with a {@code @Qualifier} annotation like {@code @Named}
will be bound as components, making them visible to the {@link org.eclipse.sisu.inject BeanLocator} and surrounding {@code WireModule} (constructed around the set of modules making up
the application; in this example there is only one, the {@code SpaceModule}).
<p>
The {@code WireModule} uses the Guice introspection SPI to analyze all bindings in the application and apply various rules to finish wiring the configuration. Unsatisfied {@code @Inject}
requirements are populated using the {@code BeanLocator} which provides a lookup service across all injectors it knows about, allowing for plugin-style solutions. As well as individual
components, the {@code WireModule} can satisfy requests for component collections like Lists and Maps (using {@code @Named} values as keys). It also cleans up duplicate and overridden
bindings, and merges {@link org.eclipse.sisu.Parameters} bindings.
</body>
</html>
